package enumdemo;

//  枚举是否可以通过反射，拿到实例对象呢？
//  任何一个类，哪怕其构造方法是私有的，我们也可以通过反射拿到他的实例对象，那么枚举的构造方法也是私有的，我们是否可以拿到呢？
//  枚举非常安全 不能通过反射来获取到枚举的实例对象
//  因为源码里面有这样代码
//        if ((clazz.getModifiers() & Modifier.ENUM) != 0)
//            throw new IllegalArgumentException("Cannot reflectively create enum objects");
//        ConstructorAccessor ca = constructorAccessor;


//  所以问:如何实现一个线程安全的单例模式[只能获取对象的一个实例]?  可以通过枚举实现
//  例子：
/*
class Person {
}
public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();
        Person person1 = new Person();
//        这里获取对象的两个实例
    }
}
*/
// 这种方式是单例模式
/*
class Person {
    private Person(){

    }
    //控制实例的个数
}
public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();//error
        Person person1 = new Person();//error
//        这里获取对象的两个实例
    }
}
*/

//主要在这
//用枚举实现一个单例模式
/*
public enum Singleton {
    INSTANCE;
    public void doSomething(){
        System.out.println("doSomething()");
    }
    public static void main(String[] args) {
        Singleton.INSTANCE.doSomething();
    }
}
*/






public enum TestEnum2 {

    RED(0,"red"),BLACK(3,"black"),
    GREEN(8,"green"),WHITE(2,"white");

    public String color;
    public int ordinal;
    TestEnum2(int ordinal,String color){
//        super();
        this.ordinal = ordinal;
        this.color = color;
    }
}
